/*****************************************************************************************
**  Author:COCO 2022
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码，可以扩展一些自定义页面或者重新配置生成的代码
import DeviceModelBody from './Quality_TestProcess.vue'
import bodymy from './Quality_TestProcessBody.vue'
import DetailProcess from './DetailProcess.vue'

let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: DeviceModelBody,
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: bodymy,
    modelFooter: '',
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
     //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前，
        //示例：在按钮的最前面添加一个按钮
        //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
        //     name: '按钮', //按钮名称
        //     icon: 'el-icon-document', //按钮图标vue2版本见iview文档icon，vue3版本见element ui文档icon(注意不是element puls文档)
        //     type: 'primary', //按钮样式vue2版本见iview文档button，vue3版本见element ui文档button
        //     onClick: function () {
        //       this.$Message.success('点击了按钮');
        //     }
        //   });
        
        // 在表单字段上添加高级选择按钮
        if (this.editFormOptions && this.editFormOptions.length > 0) {
          this.editFormOptions.forEach(x => {
            x.forEach(item => {
              if (item.field == 'Product_name') {
                item.extra = {
                  icon: "el-icon-zoom-out",
                  text: "高级选择",
                  style: "color:blue;font-size: 14px;cursor: pointer;",
                  click: () => {
                    this.$refs.gridHeader.openPaper();
                  }
                }
              }
              
              // 确保BomCode字段正确设置
              if (item.field == 'BomCode') {
                item.type = 'string';
                if (!item.edit) item.edit = { type: 'text' };
              }
            });
          });
        }

        //示例：设置修改新建、编辑弹出框字段标签的长度
        // this.boxOptions.labelWidth = 150;
        //显示序号(默认隐藏)
        this.columnIndex = true;
        
        // 设置编辑表单每行显示两列
        if (this.editFormOptions && this.editFormOptions.length > 0) {
          // 设置表单的列数，2表示每行显示2个字段
          this.editFormOptions.forEach(x => {
            x.columnCount = 2;
          });
        }
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
      
      // 在表单字段上添加高级选择按钮
      if (this.editFormOptions && this.editFormOptions.length > 0) {
        this.editFormOptions.forEach(x => {
          x.forEach(item => {
            if (item.field == 'Product_name') {
              item.extra = {
                icon: "el-icon-zoom-out",
                text: "高级选择",
                style: "color:blue;font-size: 14px;cursor: pointer;",
                click: () => {
                  this.$refs.gridHeader.openPaper();
                }
              }
            }
            
            // 确保BomCode字段正确设置
            if (item.field == 'BomCode') {
              item.type = 'string';
              if (!item.edit) item.edit = { type: 'text' };
            }
          });
        });
      }
      
      // 设置编辑表单每行显示两列
      if (this.editFormOptions && this.editFormOptions.length > 0) {
        // 设置表单的列数，2表示每行显示2个字段
        this.editFormOptions.forEach(x => {
          x.columnCount = 2;
        });
      }
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false，则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后，result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
        //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
        try {
            console.log("addBefore - 原始formData:", JSON.stringify(formData));
            
            // 获取从表1数据 (Quality_TestDetail)
            const table1Data = this.$refs.modelBody.$refs.table2 ? this.$refs.modelBody.$refs.table2.rowData || [] : [];
            console.log("addBefore - 从表1原始数据:", JSON.stringify(table1Data));
            
            // 处理从表1数据 - 质检明细
            const processedTable1Data = table1Data.map(item => ({
                QualityTestDetailId: item.QualityTestDetailId || "00000000-0000-0000-0000-000000000000",
                QualityTestMaterialId: item.QualityTestMaterialId,
                TestDetailNum: item.TestDetailNum ? Number(item.TestDetailNum) : 0,
                TestDetailNumOK: item.TestDetailNumOK ? Number(item.TestDetailNumOK) : 0,
                TestDetailNumNo: item.TestDetailNumNo ? Number(item.TestDetailNumNo) : 0,
                Qualityinspector: item.Qualityinspector || "",
                Detailedremarks: item.Detailedremarks || "",
                TestDetailResult: item.TestDetailResult || ""
            }));
            console.log("addBefore - 处理后的从表1数据:", JSON.stringify(processedTable1Data));
            
            // 获取从表2数据 (Quality_TestPlan)
            const table2Data = this.$refs.modelBody.$refs.table1 ? this.$refs.modelBody.$refs.table1.rowData || [] : [];
            console.log("addBefore - 从表2原始数据:", JSON.stringify(table2Data));
            
            // 处理从表2数据 - 质检方案
            const processedTable2Data = table2Data.map(item => ({
                QualityTestPlanId: item.QualityTestPlanId || "00000000-0000-0000-0000-000000000000",
                QualityTestMaterialId: null, // 这个会在后端设置为主表ID
                QualityTestPlanName: item.QualityTestPlanName || "",
                QualityTestPlanCode: item.QualityTestPlanCode || "",
                QualityTestPlanEnable: item.QualityTestPlanEnable !== undefined ? Number(item.QualityTestPlanEnable) : 1,
                QualityTestGroup: item.QualityTestGroup || ""
            }));
            console.log("addBefore - 处理后的从表2数据:", JSON.stringify(processedTable2Data));
            
            // 组装 Extra 字段（结构要和后端 TableExtra 匹配）
            formData.Extra = JSON.stringify({
                Table1List: processedTable1Data, // 质检明细
                Table2List: processedTable2Data  // 质检方案
            });
            
            console.log("addBefore - 最终提交的数据:", JSON.stringify(formData));
            return true;
        } catch (error) {
            console.error("处理表单数据时出错:", error);
            this.$Message.error("处理表单数据时出错: " + error.message);
            return false;
        }
    },
    updateBefore(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后，可以在此处写逻辑，如，从后台获取数据
      //(1)判断是编辑还是新建操作： this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值，请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看：console.log(this.editFormOptions)
      
      // 在表单字段上添加高级选择按钮
      if (this.editFormOptions && this.editFormOptions.length > 0) {
        this.editFormOptions.forEach(x => {
          x.forEach(item => {
            if (item.field == 'Product_name') {
              item.extra = {
                icon: "el-icon-zoom-out",
                text: "高级选择",
                style: "color:blue;font-size: 14px;cursor: pointer;",
                click: () => {
                  this.$refs.gridHeader.openPaper();
                }
              }
            }
            
          
          });
        });
      }
      this.editFormOptions.forEach(item => {
        item.forEach(x => {
          //如果是编辑设置为只读
          if (x.field == "QualityTestProcessCode") {
            x.placeholder = "请输入，忽略将自动生成";
          }
        })
      })
      
    
    },
    
    // 处理从弹出框选择的数据
    setSelectRows(rows) {
      if (!rows || rows.length == 0) return;
      // 将选中的数据回写到表单
      let row = rows[0];
      this.editFormFields.Size = row.Size;
      this.editFormFields.Model = row.Model;
      this.editFormFields.Product_name = row.Product_name;
      this.editFormFields.Product_Code = row.Product_Code;
      this.editFormFields.BomCode = row.BomCode;
    },

    // 显示详情弹窗
    showDetail(row) {
      try {
        // 直接调用Vue组件中定义的showDetailDialog方法
        this.$parent.showDetailDialog(row);
        console.log("JS文件中调用showDetailDialog方法", row);
      } catch (error) {
        console.error("显示详情弹窗出错:", error);
        
        // 如果上面的方法失败，尝试使用 $emit 发送事件
        try {
          // 使用全局事件总线发送事件
          this.$emit('show-detail-dialog', row);
        } catch (err) {
          console.error("发送事件也失败了:", err);
        }
      }
    }
  }
};
export default extension;
